package org.example;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        ListNode listNode = new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5))));
        ListNode listNode2 = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4))));
        System.out.println(main.trainingPlan(listNode, listNode2));
    }

    public ListNode trainingPlan(ListNode l1, ListNode l2) {
        // 引入伪头结点，并设置2个指针
        ListNode dum = new ListNode(0), cur = dum;
        while (l1 != null && l2 != null) {
            // 如果后一个节点的值大于前一个节点的值
            if (l1.val < l2.val) {
                // 则将当前节点的下一个节点指向l1
                cur.next = l1;
                // 然后将l1的指针后移
                l1 = l1.next;
            } else {
                // 否则将当前节点的下一个节点指向l2
                cur.next = l2;
                // 然后将l2的指针后移
                l2 = l2.next;
            }
            // 然后将当前节点的指针后移
            cur = cur.next;
        }
        // 判断哪个链表还有剩余，然后直接将剩余的链表指向当前节点的下一个节点
        cur.next = l1 != null ? l1 : l2;
        // 去掉伪头结点，返回
        return dum.next;
    }
}